import bpy

from 全局控制.Node.数据编辑.物体 import bl_修改器公共选项
from 节点.Core import bl_Mesh
from 节点.Core import bl_节点构建模板
from 节点.Core import bl_UI配色

import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类


import engine.initLIB.load_dll as engineLib
import ctypes



engineLib.flexCAPI.f_创建网格阵列修改器节点.restype = ctypes.c_bool





def f_update更新后释放数据(self, context):
	engineLib.flexCAPI.f_set上层节点更新后释放数据(ctypes.c_wchar_p(self.id_data.name), ctypes.c_wchar_p(self.name), ctypes.c_bool(bool(self.m_是否更新后释放数据)));

class C_Node_网格阵列修改器(基类.C_Node_基类):
	bl_dname = 'bl_node_网格阵列修改器'
	bl_label = '网格阵列修改器'
	bl_icon = 'MOD_SOLIDIFY'
	
	m_修改器名称 = bpy.props.StringProperty(name="修改器名称", default='Solidify')
	#m_是否渲染 = bpy.props.BoolProperty(default=True, update=f_update_修改器可渲)
	#m_是否显示 = bpy.props.BoolProperty(default=True, update=f_update_修改器可视)
	m_是否更新后释放数据 = bpy.props.BoolProperty(default=False, update=f_update更新后释放数据)
	
	def init(self, context):
		super(C_Node_网格阵列修改器, self).f_init(context)
		self.inputs.new('C_Socket_网格', name='修改网格')
		self.inputs.new('C_Socket_I32', name='数量')
		self.inputs.new('C_Socket_Vec3_Array1D', name='位置')
		self.inputs.new('C_Socket_Vec3_Array1D', name='旋转')
		self.inputs.new('C_Socket_Vec3_Array1D', name='缩放')
		
		bl_节点构建模板.f_创建网格插座(self, True)
		self.outputs.new('C_Socket_网格', name='网格')
		self.outputs.new('C_Socket_UI32_Array3D', name='元素')
		self.m_修改器名称 = '网格阵列'
		
		self.f_toCPP()
		

	def draw_buttons(self, context, layout):
		显示选项布局 = layout.row(align=True)
		显示选项布局.prop(self, 'm_修改器名称')
	
	def draw_buttons_ext(self, context, layout):
		super(C_Node_网格阵列修改器, self).draw_buttons_ext(context, layout)
		layout.prop(self, 'm_是否更新后释放数据', icon='RESTRICT_RENDER_ON')

	def f_toCPP(self):
		engineLib.flexCAPI.f_创建网格阵列修改器节点(ctypes.c_wchar_p(self.id_data.name), ctypes.c_wchar_p(self.name), self.f_getPyObject());
		f_update更新后释放数据(self, None)
		self.inputs['数量'].f_update()

		self.use_custom_color = True
		self.color = bl_UI配色.g_内部节点颜色

		
class C_NODE_MENU_网格阵列修改器(bpy.types.Operator):
	bl_idname = 'node.global_node_obj_modifiers_mesh_array'
	bl_label = '网格阵列修改器'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_网格阵列修改器', use_transform=True)
		return {'FINISHED'}
		




classes = (
	C_Node_网格阵列修改器,
	C_NODE_MENU_网格阵列修改器,
	
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)


